public class Solution1248 {
    /**
     * 给你一个整数数组 nums 和一个整数 k。
     * <p>
     * 如果某个 连续 子数组中恰好有 k 个奇数数字，我们就认为这个子数组是「优美子数组」。
     * <p>
     * 请返回这个数组中「优美子数组」的数目。
     * <p>
     *  
     * <p>
     * 示例 1：
     * <p>
     * 输入：nums = [1,1,2,1,1], k = 3
     * 输出：2
     * 解释：包含 3 个奇数的子数组是 [1,1,2,1] 和 [1,2,1,1] 。
     */
    public int numberOfSubarrays(int[] nums, int k) {
        int n = nums.length;
        int[] count = new int[n + 1];
        int odd = 0, ans = 0;
        count[0] = 1;
        for (int i = 0; i < n; i++) {
            odd += nums[i] & 1;
            ans += odd >= k ? count[odd - k] : 0;
            count[odd] += 1;
        }
        return ans;
    }
}
